package javaStudy.算法;

public class 合并两个有序数组 {
    // 合并两个升序数组的方法
    public static int[] merge(int[] nums1, int[] nums2) {
        // 初始化双指针，分别指向两个数组的起始位置
        int i = 0, j = 0;
        // 结果数组长度 = 两个原数组长度之和
        int[] result = new int[nums1.length + nums2.length];
        // 用于记录结果数组的当前索引
        int index = 0;

        // 循环比较双指针指向的元素，按升序放入结果数组
        while (i < nums1.length && j < nums2.length) {
            if (nums1[i] < nums2[j]) {
                result[index++] = nums1[i++];
            } else {
                result[index++] = nums2[j++];
            }
        }

        // 处理第一个数组剩余的元素
        while (i < nums1.length) {
            result[index++] = nums1[i++];
        }

        // 处理第二个数组剩余的元素
        while (j < nums2.length) {
            result[index++] = nums2[j++];
        }

        return result;
    }

    // 主方法（测试示例）
    public static void main(String[] args) {
        int[] nums1 = {1, 3, 5, 7};
        int[] nums2 = {2, 4, 6, 8, 9};
        
        int[] mergedArray = merge(nums1, nums2);
        
        // 打印合并后的数组
        System.out.print("合并后的有序数组：");
        for (int num : mergedArray) {
            System.out.print(num + " ");
        }
        // 输出结果：合并后的有序数组：1 2 3 4 5 6 7 8 9 
    }
}